#define _CRT_SECURE_NO_WARNINGS 01

//#include<stdio.h>
//#include<assert.h>
//
//void* my_memcpy(void* st1, const void* st2,size_t num)
//{
//	assert(st1 != NULL);
//	assert(st2 != NULL);
//	void* re = st1;
//	while (num--)
//	{
//		*(char *)st1 = *(char *)st2;
//		st1 = (char*)st1 + 1;
//		st2 = (char*)st2 + 1;
//	}
//	return re;
//}
//
//
//int main()
//{
//	int num[10] = { 0 };
//	int num2[4] = { 1,2,3,4};
//	my_memcpy(num, num2, sizeof(num2));
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d ", num[i]);
//	}
//	return 0;
//}

#include<stdio.h>
#include<assert.h>

void* my_memmove(void* s1, void* s2, size_t num)
{
	void* re = s1;
	if (s1 <= s2 || (char*)s1 >= ((char*)s2 + num))
	{
		while (num--) {
			*(char*)s1 = *(char*)s2;
			s1 = (char*)s1 + 1;
			s2 = (char*)s2 + 1;
		}
	}
	else
	{
		s1 = (char*)s1 + num - 1;
		s2 = (char*)s2 + num - 1;
		while (num--) {
			*(char*)s1 = *(char*)s2;
			s1 = (char*)s1 - 1;
			s2 = (char*)s2 - 1;
		}
	}
	return re;
}


int main()
{
	char str[] = "code is perfect";
	my_memmove(str + 1, str + 3, 6);
	puts(str);
	return 0;
}

//#include<stdio.h>
//
//int main()
//{
//
//	enum ENUM_A
//	{
//		X1,
//		Y1,
//		Z1 = 255,
//		A1,
//		B1,
//	};
//	enum ENUM_A enumA = Y1;
//	enum ENUM_A enumB = B1;
//	printf("%d %d\n", enumA, enumB);
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//    union
//    {
//        short k;
//        char i[2];
//    }*s, a;
//    s = &a;
//    s->i[0] = 0x39;
//    s->i[1] = 0x38;
//    printf("%x\n", a.k);
//    return 0;
//}
//#include<stdio.h>
//
//int main()
//{
//    unsigned char puc[4];
//    struct tagPIM
//    {
//        unsigned char ucPim1;
//        unsigned char ucData0 : 1;
//        unsigned char ucData1 : 2;
//        unsigned char ucData2 : 3;
//    }*pstPimData;
//    pstPimData = (struct tagPIM*)puc;
//    memset(puc, 0, 4);
//    pstPimData->ucPim1 = 2;
//    pstPimData->ucData0 = 3;
//    pstPimData->ucData1 = 4;
//    pstPimData->ucData2 = 5;
//    printf("%02x %02x %02x %02x\n", puc[0], puc[1], puc[2], puc[3]);
//    return 0;
//}
